<?xml version = '1.0' encoding = 'UTF-8'?>
<HBRRepo><variables/><rulesets/><rules><rule id="1" name="OQP_Clear What If" product="Planning"><property name="application">SalesPln</property><property name="plantype">OEP_QTP</property><property name="seeded">true</property><script type="groovy">        	/*PURPOSE: This rule clears Target Quota of Best Case , Worst Case and Conservative scenario, Aggregates numbers and recalculate Growth%*/
        	List&lt;String> ColumnDimensions=[];
			List&lt;String> NewColumnDims =[];
			List&lt;String> RowDimensions = [];
            List&lt;String> CustomDimensions = []
            List&lt;String> CustomDimMembers =[]
			List&lt;String> fixMemberNames = operation.grid.pov*.essbaseMbrName
			List&lt;String> povMembers =[];
            List&lt;String> povStdMembers =[]; 
            String  strColDimName;
			String  driverDimMember;
            int iCnt;
			try{
			StringBuilder cscript = new StringBuilder();
			cscript.append('''SET AGGMISSG ON;\n''');
			cscript.append('''SET UPDATECALC OFF;\n''');
            
            /*Get driver member*/
            Application app=operation.getApplication();            
			Cube qtp=operation.getCube(); 
			Dimension dim=app.getDimension(DimensionType.ACCOUNT,qtp);
        	if (dim.hasMember("OQP_Units",qtp)==true)
          	{
				driverDimMember="OQP_Last Year Units";
            }
			else
			{
				
				 driverDimMember="OQP_Last Year Revenue";                    
			}   
            
			def grid=operation.grid;
			List&lt;DataGrid.HeaderCell> pov=grid.getPov()
            
            /*Identify Row Dimensions*/
			List&lt;DataGrid.Row> rows = grid.getRows()
			for (DataGrid.Row row : rows) 
			{
				List&lt;DataGrid.HeaderCell> subRows = row.getHeaders();
				for(DataGrid.HeaderCell cell : subRows) 
				  {
					  String memName = cell.getEssbaseMbrName();
				   if (!RowDimensions.contains(memName))
				   {
				   RowDimensions.add('''@ICHILDREN("'''+memName +'''")''')
				  
				   }     	 
				 }        
			}
            /*Identify POV Dimensoins and their members*/

			for (DataGrid.HeaderCell cell : pov)
			{
			   String mbrName = cell.getEssbaseMbrName();
			   String dimType = cell.getDimensionType();		  
			   String dimName = cell.getDimName();
				if(!dimType.equals("Scenario"))
				{
					if(dimType.equals("Currency")  ||  dimType.equals("Version") || dimType.equals("Year") || dimType.equals("Simple Currency"))
                    {
                    	    povStdMembers.add('''"'''+mbrName+'''"''');                                                	
                    }
                    else
                    {
                    		povMembers.add('''@Relative("'''+mbrName+'''",0)''');                     
                        	CustomDimensions.add('''"'''+dimName+'''"''');
                            CustomDimMembers.add('''"'''+mbrName+'''"''');
                    }                   
				}    
			}
            List&lt;List&lt;DataGrid.HeaderCell>> cols = grid.getColumns();
			for (List&lt;DataGrid.HeaderCell> cells : cols) 
			{
		 	for (DataGrid.HeaderCell cell : cells)  
			  {
			   String memName = cell.getMbrName();
			   String dimName = cell.getDimName();
               String dimType = cell.getDimensionType();
               if(!dimType.equals("Scenario"))
				{
			  	 if (!ColumnDimensions.contains(dimName))
				  {
					if (memName.equals("YearTotal") || memName.equals(driverDimMember)  )
					{
						ColumnDimensions.add(dimName)
					}
					else
					{
					 if(!NewColumnDims.contains(dimName))	
							{
								NewColumnDims.add(dimName)
								strColDimName=dimName;
							}
					}
			   
				 } 
                }
			  }
             }
			
			cscript.append('''FIX(@Relative("YearTotal",0),"BegBalance",&amp;OEP_CurYr,''')
			cscript.append(povStdMembers.join(''',''')+''',''')
            cscript.append(RowDimensions.join(''',''')+''')\n''')
			cscript.append('''	FIX(''')			
            if (NewColumnDims.size()>0)
            {
            	cscript.append('''@Relative("OEP_All '''+ strColDimName+'''",0),''')
                CustomDimensions.add(strColDimName);
            }
            if (povMembers.size()>0)
            {
			cscript.append(povMembers.join(''',''') +''',''')
            }
			cscript.append('''@Relative("OQP_Last Year Bookings",0),"OQP_Target Quota","OQP_Growth%")\n'''); 
			cscript.append('''		ClearData "OEP_Best Case";\n''')
            cscript.append('''		ClearData "OEP_Conservative";\n''')
            cscript.append('''		ClearData "OEP_Worst Case";\n''')			
			cscript.append('''	ENDFIX\n''')
             /*Aggregate Custom Dimensions for first level children of Territory or Resource dimensions*/
            
            if (CustomDimensions.size()>1)
             {
             	cscript.append('''		FIX(@Relative("OQP_Last Year Bookings",0),"OQP_Target Quota","OQP_Allocated Target Quota","OEP_Worst Case","OEP_Best Case","OEP_Conservative")\n''')
                for (iCnt=0;iCnt&lt;CustomDimensions.size()-1;iCnt++)
                {
                cscript.append('''			FIX(@RELATIVE('''+CustomDimensions[iCnt]+''',0))\n''')              
                }                
                for (iCnt=CustomDimensions.size()-1;iCnt>0;iCnt--)
                {
                cscript.append('''				AGG('''+CustomDimensions[iCnt]+''');\n''')                        
                cscript.append('''			ENDFIX\n''')
                }
                cscript.append('''			AGG('''+CustomDimensions[0]+''');\n''')
                cscript.append('''		ENDFIX\n''')
            }
            if (CustomDimensions.size()==1)
            {
            	cscript.append('''		FIX(@Relative("OQP_Last Year Bookings",0),"OQP_Target Quota","OQP_Allocated Target Quota")\n''')
             	cscript.append('''	 		AGG('''+CustomDimensions[0]+''');\n''')
                cscript.append('''		ENDFIX\n''')            
            }
             /*Recalculate Growth percentgates*/
             
            cscript.append('''	FIX("OEP_Worst Case","OEP_Best Case","OEP_Conservative"''')			
			if (CustomDimMembers.size()>0)
			{
            	cscript.append (''','''+CustomDimMembers.join(''','''))
			}		
         	if (NewColumnDims.size()>0)
            {
            	cscript.append(''','''+'''@ICHILDREN("OEP_All '''+ strColDimName+'''")''')
            }
			cscript.append(''')\n''')
			cscript.append('''		"OQP_Growth%"''')
			cscript.append('''		( \n''')
			cscript.append('''			"OQP_Growth%"  = (("OQP_Target Quota"->"YearTotal"-"'''+driverDimMember+'''"->"YearTotal")/ "'''+driverDimMember+'''"->"YearTotal");\n''')
			cscript.append('''		) \n''')
			cscript.append('''	ENDFIX; \n''')
            cscript.append('''ENDFIX\n''')
			println (cscript.toString())            
			return cscript.toString();
			}
            catch(all) {
				throw new HspRuntimeException('Error occured while executing business rule');
			}
		
		</script></rule></rules><components/><deployobjects><deployobject product="2" application="salespln" plantype="oep_qtp" obj_id="1" obj_type="1" name="OQP_CLEAR WHAT IF"/></deployobjects></HBRRepo>